home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / mcr1.c < prev    next >
C/C++ Source or Header  |  2000-04-08  |  17KB  |  533 lines

  1. /***************************************************************************
  2.  
  3.     Midway MCR-1 system
  4.  
  5.     Currently implemented:
  6.         * Solar Fox
  7.         * Kick
  8.  
  9. ****************************************************************************
  10.  
  11.     Memory map
  12.  
  13. ****************************************************************************
  14.  
  15.     ========================================================================
  16.     CPU #1
  17.     ========================================================================
  18.     0000-6FFF   R     xxxxxxxx    Program ROM
  19.     7000-77FF   R/W   xxxxxxxx    NVRAM
  20.     F000-F1FF   R/W   xxxxxxxx    Sprite RAM
  21.     F400-F41F     W   xxxxxxxx    Palette RAM blue/green
  22.     F800-F81F     W   xxxxxxxx    Palette RAM red
  23.     FC00-FFFF   R/W   xxxxxxxx    Background video RAM
  24.     ========================================================================
  25.     0000        R     x-xxxxxx    Input ports
  26.                 R     x-------    Service switch (active low)
  27.                 R     --x-----    Tilt
  28.                 R     ---xxx--    External inputs
  29.                 R     ------x-    Right coin
  30.                 R     -------x    Left coin
  31.     0000        W     xxxxxxxx    Data latch OP0 (coin meters, 2 led's and cocktail 'flip')
  32.     0001        R     xxxxxxxx    External inputs
  33.     0002        R     xxxxxxxx    External inputs
  34.     0003        R     xxxxxxxx    DIP switches
  35.     0004        R     xxxxxxxx    External inputs
  36.     0004        W     xxxxxxxx    Data latch OP4 (comm. with external hardware)
  37.     0007        R     xxxxxxxx    Audio status
  38.     001C-001F   W     xxxxxxxx    Audio latches 1-4
  39.     00E0        W     --------    Watchdog reset
  40.     00E8        W     xxxxxxxx    Unknown (written at initialization time)
  41.     00F0-00F3   W     xxxxxxxx    CTC communications
  42.     ========================================================================
  43.     Interrupts:
  44.         NMI ???
  45.         INT generated by CTC
  46.     ========================================================================
  47.  
  48.  
  49.     ========================================================================
  50.     CPU #2 (Super Sound I/O)
  51.     ========================================================================
  52.     0000-3FFF   R     xxxxxxxx    Program ROM
  53.     8000-83FF   R/W   xxxxxxxx    Program RAM
  54.     9000-9003   R     xxxxxxxx    Audio latches 1-4
  55.     A000          W   xxxxxxxx    AY-8910 #1 control
  56.     A001        R     xxxxxxxx    AY-8910 #1 status
  57.     A002          W   xxxxxxxx    AY-8910 #1 data
  58.     B000          W   xxxxxxxx    AY-8910 #2 control
  59.     B001        R     xxxxxxxx    AY-8910 #2 status
  60.     B002          W   xxxxxxxx    AY-8910 #2 data
  61.     C000          W   xxxxxxxx    Audio status
  62.     E000          W   xxxxxxxx    Unknown
  63.     F000        R     xxxxxxxx    Audio board switches
  64.     ========================================================================
  65.     Interrupts:
  66.         NMI ???
  67.         INT generated by external circuitry 780 times/second
  68.     ========================================================================
  69.  
  70. ***************************************************************************/
  71.  
  72.  
  73. #include "driver.h"
  74. #include "machine/mcr.h"
  75. #include "machine/z80fmly.h"
  76. #include "sndhrdw/mcr.h"
  77. #include "vidhrdw/generic.h"
  78.  
  79.  
  80. /* video driver data & functions */
  81. extern INT8 mcr12_sprite_xoffs;
  82. extern INT8 mcr12_sprite_xoffs_flip;
  83.  
  84. int mcr12_vh_start(void);
  85. void mcr12_vh_stop(void);
  86. void mcr1_vh_screenrefresh(struct osd_bitmap *bitmap, int full_refresh);
  87.  
  88. WRITE_HANDLER( mcr1_videoram_w );
  89.  
  90.  
  91. static const UINT8 *nvram_init;
  92.  
  93.  
  94. /*************************************
  95.  *
  96.  *    Kick input ports
  97.  *
  98.  *************************************/
  99.  
  100. static READ_HANDLER( kick_dial_r )
  101. {
  102.     return (readinputport(1) & 0x0f) | ((readinputport(6) << 4) & 0xf0);
  103. }
  104.  
  105.  
  106.  
  107. /*************************************
  108.  *
  109.  *    Solar Fox input ports
  110.  *
  111.  *************************************/
  112.  
  113. static READ_HANDLER( solarfox_input_0_r )
  114. {
  115.     /* This is a kludge; according to the wiring diagram, the player 2 */
  116.     /* controls are hooked up as documented below. If you go into test */
  117.     /* mode, they will respond. However, if you try it in a 2-player   */
  118.     /* game in cocktail mode, they don't work at all. So we fake-mux   */
  119.     /* the controls through player 1's ports */
  120.     if (mcr_cocktail_flip)
  121.         return readinputport(0) | 0x08;
  122.     else
  123.         return ((readinputport(0) & ~0x14) | 0x08) | ((readinputport(0) & 0x08) >> 1) | ((readinputport(2) & 0x01) << 4);
  124. }
  125.  
  126.  
  127. static READ_HANDLER( solarfox_input_1_r )
  128. {
  129.     /*  same deal as above */
  130.     if (mcr_cocktail_flip)
  131.         return readinputport(1) | 0xf0;
  132.     else
  133.         return (readinputport(1) >> 4) | 0xf0;
  134. }
  135.  
  136.  
  137.  
  138. /*************************************
  139.  *
  140.  *    NVRAM save/load
  141.  *
  142.  *************************************/
  143.  
  144. static void mcr1_nvram_handler(void *file, int read_or_write)
  145. {
  146.     unsigned char *ram = memory_region(REGION_CPU1);
  147.  
  148.     if (read_or_write)
  149.         osd_fwrite(file, &ram[0x7000], 0x800);
  150.     else if (file)
  151.         osd_fread(file, &ram[0x7000], 0x800);
  152.     else if (nvram_init)
  153.         memcpy(&ram[0x7000], nvram_init, 16);
  154. }
  155.  
  156.  
  157.  
  158. /*************************************
  159.  *
  160.  *    Main CPU memory handlers
  161.  *
  162.  *************************************/
  163.  
  164. static struct MemoryReadAddress readmem[] =
  165. {
  166.     { 0x0000, 0x6fff, MRA_ROM },
  167.     { 0x7000, 0x77ff, MRA_RAM },
  168.     { 0xf000, 0xf1ff, MRA_RAM },
  169.     { 0xfc00, 0xffff, MRA_RAM },
  170.     { -1 }  /* end of table */
  171. };
  172.  
  173.  
  174. static struct MemoryWriteAddress writemem[] =
  175. {
  176.     { 0x0000, 0x6fff, MWA_ROM },
  177.     { 0x7000, 0x77ff, MWA_RAM },
  178.     { 0xf000, 0xf1ff, MWA_RAM, &spriteram, &spriteram_size },
  179.     { 0xf400, 0xf41f, paletteram_xxxxRRRRBBBBGGGG_split1_w, &paletteram },
  180.     { 0xf800, 0xf81f, paletteram_xxxxRRRRBBBBGGGG_split2_w, &paletteram_2 },
  181.     { 0xfc00, 0xffff, mcr1_videoram_w, &videoram, &videoram_size },
  182.     { -1 }  /* end of table */
  183. };
  184.  
  185.  
  186. static struct IOReadPort readport[] =
  187. {
  188.     { 0x00, 0x00, input_port_0_r },
  189.     { 0x01, 0x01, input_port_1_r },
  190.     { 0x02, 0x02, input_port_2_r },
  191.     { 0x03, 0x03, input_port_3_r },
  192.     { 0x04, 0x04, input_port_4_r },
  193.     { 0x07, 0x07, ssio_status_r },
  194.     { 0x10, 0x10, input_port_0_r },
  195.     { 0xf0, 0xf3, z80ctc_0_r },
  196.     { -1 }
  197. };
  198.  
  199.  
  200. static struct IOWritePort writeport[] =
  201. {
  202.     { 0x1c, 0x1f, ssio_data_w },
  203.     { 0xe0, 0xe0, watchdog_reset_w },
  204.     { 0xe8, 0xe8, MWA_NOP },
  205.     { 0xf0, 0xf3, z80ctc_0_w },
  206.     { -1 }    /* end of table */
  207. };
  208.  
  209.  
  210.  
  211. /*************************************
  212.  *
  213.  *    Port definitions
  214.  *
  215.  *************************************/
  216.  
  217. INPUT_PORTS_START( solarfox )
  218.     PORT_START    /* IN0 */
  219.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  220.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  221.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
  222.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
  223.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  224.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT )
  225.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 )
  226.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  227.  
  228.     PORT_START    /* IN1 */
  229.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
  230.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
  231.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
  232.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY )
  233.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
  234.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_COCKTAIL )
  235.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_COCKTAIL )
  236.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_COCKTAIL )
  237.  
  238.     PORT_START    /* IN2 */
  239.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  240.     PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
  241.  
  242.     PORT_START    /* IN3 -- dipswitches */
  243.     PORT_DIPNAME( 0x03, 0x03, "Bonus" )
  244.     PORT_DIPSETTING(    0x02, "None" )
  245.     PORT_DIPSETTING(    0x03, "After 10 racks" )
  246.     PORT_DIPSETTING(    0x01, "After 20 racks" )
  247.     PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNKNOWN )
  248.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ))
  249.     PORT_DIPSETTING(    0x10, DEF_STR( Off ))
  250.     PORT_DIPSETTING(    0x00, DEF_STR( On ))
  251.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  252.     PORT_DIPNAME( 0x40, 0x40, "Ignore Hardware Failure" )
  253.     PORT_DIPSETTING(    0x40, DEF_STR( Off ))
  254.     PORT_DIPSETTING(    0x00, DEF_STR( On ))
  255.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ))
  256.     PORT_DIPSETTING(    0x80, DEF_STR( Upright ))
  257.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ))
  258.  
  259.     PORT_START    /* IN4 */
  260.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
  261.  
  262.     PORT_START    /* AIN0 */
  263.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
  264. INPUT_PORTS_END
  265.  
  266.  
  267. INPUT_PORTS_START( kick )
  268.     PORT_START    /* IN0 */
  269.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  270.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  271.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
  272.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
  273.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  274.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT )
  275.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
  276.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  277.  
  278.     PORT_START    /* IN1 -- this is the Kick spinner input.  */
  279.     PORT_ANALOG( 0xff, 0x00, IPT_DIAL | IPF_REVERSE, 3, 50, 0, 0 )
  280.  
  281.     PORT_START    /* IN2 */
  282.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
  283.  
  284.     PORT_START    /* IN3 -- dipswitches */
  285.     PORT_DIPNAME( 0x01, 0x00, "Music" )
  286.     PORT_DIPSETTING(    0x01, DEF_STR( Off ))
  287.     PORT_DIPSETTING(    0x00, DEF_STR( On ))
  288.     PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
  289.  
  290.     PORT_START    /* IN4 */
  291.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
  292.  
  293.     PORT_START    /* AIN0 */
  294.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
  295.  
  296.     PORT_START    /* (fake) player 2 dial */
  297.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
  298. INPUT_PORTS_END
  299.  
  300.  
  301. INPUT_PORTS_START( kicka )
  302.     PORT_START    /* IN0 */
  303.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  304.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  305.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
  306.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
  307.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  308.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT )
  309.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
  310.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  311.  
  312.     PORT_START    /* IN1 -- this is the Kick spinner input.  */
  313.     PORT_ANALOG( 0xff, 0x00, IPT_DIAL | IPF_REVERSE, 3, 50, 0, 0 )
  314.  
  315.     PORT_START    /* IN2 */
  316.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  317.     PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
  318.  
  319.     PORT_START    /* IN3 -- dipswitches */
  320.     PORT_DIPNAME( 0x01, 0x00, "Music" )
  321.     PORT_DIPSETTING(    0x01, DEF_STR( Off ))
  322.     PORT_DIPSETTING(    0x00, DEF_STR( On ))
  323.     PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNKNOWN )
  324.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ))
  325.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ))
  326.     PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ))
  327.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  328.  
  329.     PORT_START    /* IN4 */
  330.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
  331.  
  332.     PORT_START    /* AIN0 */
  333.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
  334.  
  335.     PORT_START    /* (fake) player 2 dial */
  336.     PORT_ANALOG( 0xff, 0x00, IPT_DIAL | IPF_REVERSE | IPF_COCKTAIL, 3, 50, 0, 0 )
  337. INPUT_PORTS_END
  338.  
  339.  
  340.  
  341. /*************************************
  342.  *
  343.  *    Graphics definitions
  344.  *
  345.  *************************************/
  346.  
  347. static struct GfxDecodeInfo gfxdecodeinfo[] =
  348. {
  349.     { REGION_GFX1, 0, &mcr_bg_layout,     0, 1 },    /* colors 0-15 */
  350.     { REGION_GFX2, 0, &mcr_sprite_layout, 16, 1 },    /* colors 16-31 */
  351.     { -1 } /* end of array */
  352. };
  353.  
  354.  
  355.  
  356. /*************************************
  357.  *
  358.  *    Machine driver
  359.  *
  360.  *************************************/
  361.  
  362. static struct MachineDriver machine_driver_mcr1 =
  363. {
  364.     /* basic machine hardware */
  365.     {
  366.         {
  367.             CPU_Z80,
  368.             2500000,    /* 2.5 Mhz */
  369.             readmem,writemem,readport,writeport,
  370.             mcr_interrupt,1,
  371.             0,0,mcr_daisy_chain
  372.         },
  373.         SOUND_CPU_SSIO
  374.     },
  375.     30, DEFAULT_REAL_30HZ_VBLANK_DURATION,
  376.     1,
  377.     mcr_init_machine,
  378.  
  379.     /* video hardware */
  380.     32*16, 30*16, { 0*16, 32*16-1, 0*16, 30*16-1 },
  381.     gfxdecodeinfo,
  382.     32,32,
  383.     0,
  384.  
  385.     VIDEO_TYPE_RASTER | VIDEO_SUPPORTS_DIRTY | VIDEO_MODIFIES_PALETTE | VIDEO_UPDATE_BEFORE_VBLANK,
  386.     0,
  387.     mcr12_vh_start,
  388.     mcr12_vh_stop,
  389.     mcr1_vh_screenrefresh,
  390.  
  391.     /* sound hardware */
  392.     SOUND_SUPPORTS_STEREO,0,0,0,
  393.     {
  394.         SOUND_SSIO
  395.     },
  396.     mcr1_nvram_handler
  397. };
  398.  
  399.  
  400.  
  401. /*************************************
  402.  *
  403.  *    Driver initialization
  404.  *
  405.  *************************************/
  406.  
  407. static void init_solarfox(void)
  408. {
  409.     static const UINT8 hiscore_init[] = { 0,0,1,1,1,1,1,3,3,3,7 };
  410.     nvram_init = hiscore_init;
  411.  
  412.     MCR_CONFIGURE_SOUND(MCR_SSIO);
  413.     install_port_read_handler(0, 0x00, 0x00, solarfox_input_0_r);
  414.     install_port_read_handler(0, 0x01, 0x01, solarfox_input_1_r);
  415.     install_port_write_handler(0, 0x01, 0x01, mcr_control_port_w);
  416.  
  417.     mcr12_sprite_xoffs = 16;
  418.     mcr12_sprite_xoffs_flip = 0;
  419. }
  420.  
  421.  
  422. static void init_kick(void)
  423. {
  424.     nvram_init = NULL;
  425.  
  426.     MCR_CONFIGURE_SOUND(MCR_SSIO);
  427.     install_port_read_handler(0, 0x01, 0x01, kick_dial_r);
  428.     install_port_write_handler(0, 0x03, 0x03, mcr_control_port_w);
  429.  
  430.     mcr12_sprite_xoffs = 0;
  431.     mcr12_sprite_xoffs_flip = 16;
  432. }
  433.  
  434.  
  435.  
  436. /*************************************
  437.  *
  438.  *    ROM definitions
  439.  *
  440.  *************************************/
  441.  
  442. ROM_START( solarfox )
  443.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  444.     ROM_LOAD( "sfcpu.3b",     0x0000, 0x1000, 0x8c40f6eb )
  445.     ROM_LOAD( "sfcpu.4b",     0x1000, 0x1000, 0x4d47bd7e )
  446.     ROM_LOAD( "sfcpu.5b",     0x2000, 0x1000, 0xb52c3bd5 )
  447.     ROM_LOAD( "sfcpu.4d",     0x3000, 0x1000, 0xbd5d25ba )
  448.     ROM_LOAD( "sfcpu.5d",     0x4000, 0x1000, 0xdd57d817 )
  449.     ROM_LOAD( "sfcpu.6d",     0x5000, 0x1000, 0xbd993cd9 )
  450.     ROM_LOAD( "sfcpu.7d",     0x6000, 0x1000, 0x8ad8731d )
  451.  
  452.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  453.     ROM_LOAD( "sfsnd.7a",     0x0000, 0x1000, 0xcdecf83a )
  454.     ROM_LOAD( "sfsnd.8a",     0x1000, 0x1000, 0xcb7788cb )
  455.     ROM_LOAD( "sfsnd.9a",     0x2000, 0x1000, 0x304896ce )
  456.  
  457.     ROM_REGION( 0x02000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  458.     ROM_LOAD( "sfcpu.4g",     0x0000, 0x1000, 0xba019a60 )
  459.     ROM_LOAD( "sfcpu.5g",     0x1000, 0x1000, 0x7ff0364e )
  460.  
  461.     ROM_REGION( 0x08000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  462.     ROM_LOAD( "sfvid.1a",     0x0000, 0x2000, 0x9d9b5d7e )
  463.     ROM_LOAD( "sfvid.1b",     0x2000, 0x2000, 0x78801e83 )
  464.     ROM_LOAD( "sfvid.1d",     0x4000, 0x2000, 0x4d8445cf )
  465.     ROM_LOAD( "sfvid.1e",     0x6000, 0x2000, 0x3da25495 )
  466. ROM_END
  467.  
  468.  
  469. ROM_START( kick )
  470.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  471.     ROM_LOAD( "1200a-v2.b3",  0x0000, 0x1000, 0x65924917 )
  472.     ROM_LOAD( "1300b-v2.b4",  0x1000, 0x1000, 0x27929f52 )
  473.     ROM_LOAD( "1400c-v2.b5",  0x2000, 0x1000, 0x69107ce6 )
  474.     ROM_LOAD( "1500d-v2.d4",  0x3000, 0x1000, 0x04a23aa1 )
  475.     ROM_LOAD( "1600e-v2.d5",  0x4000, 0x1000, 0x1d2834c0 )
  476.     ROM_LOAD( "1700f-v2.d6",  0x5000, 0x1000, 0xddf84ce1 )
  477.  
  478.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  479.     ROM_LOAD( "4200-a.a7",    0x0000, 0x1000, 0x9e35c02e )
  480.     ROM_LOAD( "4300-b.a8",    0x1000, 0x1000, 0xca2b7c28 )
  481.     ROM_LOAD( "4400-c.a9",    0x2000, 0x1000, 0xd1901551 )
  482.     ROM_LOAD( "4500-d.a10",   0x3000, 0x1000, 0xd36ddcdc )
  483.  
  484.     ROM_REGION( 0x02000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  485.     ROM_LOAD( "1800g-v2.g4",  0x0000, 0x1000, 0xb4d120f3 )
  486.     ROM_LOAD( "1900h-v2.g5",  0x1000, 0x1000, 0xc3ba4893 )
  487.  
  488.     ROM_REGION( 0x08000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  489.     ROM_LOAD( "2600a-v2.1e",  0x0000, 0x2000, 0x2c5d6b55 )
  490.     ROM_LOAD( "2700b-v2.1d",  0x2000, 0x2000, 0x565ea97d )
  491.     ROM_LOAD( "2800c-v2.1b",  0x4000, 0x2000, 0xf3be56a1 )
  492.     ROM_LOAD( "2900d-v2.1a",  0x6000, 0x2000, 0x77da795e )
  493. ROM_END
  494.  
  495.  
  496. ROM_START( kicka )
  497.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  498.     ROM_LOAD( "1200-a.b3",    0x0000, 0x1000, 0x22fa42ed )
  499.     ROM_LOAD( "1300-b.b4",    0x1000, 0x1000, 0xafaca819 )
  500.     ROM_LOAD( "1400-c.b5",    0x2000, 0x1000, 0x6054ee56 )
  501.     ROM_LOAD( "1500-d.d4",    0x3000, 0x1000, 0x263af0f3 )
  502.     ROM_LOAD( "1600-e.d5",    0x4000, 0x1000, 0xeaaa78a7 )
  503.     ROM_LOAD( "1700-f.d6",    0x5000, 0x1000, 0xc06c880f )
  504.  
  505.     ROM_REGION( 0x10000, REGION_CPU2 )    /* 64k for the audio CPU */
  506.     ROM_LOAD( "4200-a.a7",    0x0000, 0x1000, 0x9e35c02e )
  507.     ROM_LOAD( "4300-b.a8",    0x1000, 0x1000, 0xca2b7c28 )
  508.     ROM_LOAD( "4400-c.a9",    0x2000, 0x1000, 0xd1901551 )
  509.     ROM_LOAD( "4500-d.a10",   0x3000, 0x1000, 0xd36ddcdc )
  510.  
  511.     ROM_REGION( 0x02000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  512.     ROM_LOAD( "1000-g.g4",    0x0000, 0x1000, 0xacdae4f6 )
  513.     ROM_LOAD( "1100-h.g5",    0x1000, 0x1000, 0xdbb18c96 )
  514.  
  515.     ROM_REGION( 0x08000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  516.     ROM_LOAD( "2600-a.1e",    0x0000, 0x2000, 0x74b409d7 )
  517.     ROM_LOAD( "2700-b.1d",    0x2000, 0x2000, 0x78eda36c )
  518.     ROM_LOAD( "2800-c.1b",    0x4000, 0x2000, 0xc93e0170 )
  519.     ROM_LOAD( "2900-d.1a",    0x6000, 0x2000, 0x91e59383 )
  520. ROM_END
  521.  
  522.  
  523.  
  524. /*************************************
  525.  *
  526.  *    Game drivers
  527.  *
  528.  *************************************/
  529.  
  530. GAME( 1981, solarfox, 0,    mcr1, solarfox, solarfox, ROT90 ^ ORIENTATION_FLIP_Y, "Bally Midway", "Solar Fox" )
  531. GAME( 1981, kick,     0,    mcr1, kick,     kick,     ORIENTATION_SWAP_XY,        "Midway", "Kick (upright)" )
  532. GAME( 1981, kicka,    kick, mcr1, kicka,    kick,     ROT90,                      "Midway", "Kick (cocktail)" )
  533.